home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Franz PD
/
Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).zip
/
Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).adf
/
tracker.library
/
Demos
/
File.asm
< prev
next >
Wrap
Assembly Source File
|
1994-01-09
|
8KB
|
281 lines
;TestProgramm für "tracker.library"
; Testet TRK_Open, TRK_OpenFromLock und TRK_Close
NOLIST
INCLUDE "exec/LVO.i"
INCLUDE "exec/memory.i"
INCLUDE "dos/LVO.i"
INCLUDE "dos/dosextens.i"
INCLUDE "tracker.i"
LIST
HEADLEN: EQU 32 ;soviel wird ausgegeben
Print: MACRO
move.l Output,d1
move.l #\1,d2
CALLDOS VFPrintf
ENDM
_TrackerBase: EQUR a5
_DosBase: EQUR a4
Output: EQUR d7
Buffer: EQUR a3
; WB-Message ?
sub.l a1,a1 ;a1=0->eigener Task
CALLEXEC FindTask ;Wo darf man denn nachschauen ?
move.l d0,a0
tst.l pr_CLI(a0) ;von CLI oder WB aus gestartet ?
bne fromCLI
;von WB aus:
lea pr_MsgPort(a0),a0
move.l a0,-(sp)
CALLEXEC WaitPort ;auf Start-Message warten
move.l (sp)+,a0
CALLEXEC GetMsg ;muß nachher beantwortet werden
move.l d0,WBenchMsg
fromCLI:
; Tracker-Library öffnen
OPENLIB TrName
tst.l d0
beq ende_all
move.l d0,_TrackerBase
TRK_OPENSTDLIB DOS,36
tst.l d0
beq ende_trk
move.l d0,_DosBase
tst.l WBenchMsg
bne fromWB
;von CLI aus -> Ausgaben ins CLI-Fenster
CALLDOS Output
move.l d0,Output
bra main
;von WB aus gestartet -> eigenes Window nötig
fromWB: move.l #WdName,d1
move.l #MODE_OLDFILE,d2
CALLTRK TRK_Open
move.l d0,Output
;---------------------------------------------------------------------------
;Haupt-Testteil
OPEN: MACRO ;Name
move.l #\1,d1
bsr Open_File
ENDM
LOPEN: MACRO ;Name
move.l #\1,d1
bsr Lock_Open
ENDM
CLOSE: MACRO ;FileHandle
move.l \1,d1
bsr Close_File
ENDM
main: move.l #2*HEADLEN,d0
move.l #MEMF_ANY,d1
CALLTRK TRK_AllocMem
tst.l d0
beq ende_main
move.l d0,Buffer
OPEN FileName_1
LOPEN FileName_1
bsr Compare
LOPEN FileName_2
move.l d0,FH_2b
OPEN FileName_2
move.l d0,FH_2a
bsr Compare
OPEN FileName_3
move.l d0,FH_3a
LOPEN FileName_3
move.l d0,FH_3b
bsr Compare
CLOSE FH_2a
CLOSE FH_2b
LOPEN FileName_4
OPEN FileName_4
bsr Compare
CLOSE FH_3a
CLOSE FH_3b
move.l #CMD_List,d1
moveq #0,d2
move.l Output,d3
CALLDOS Execute
move.l #FileName_5,d1
move.l #MODE_NEWFILE,d2
CALLTRK TRK_Open
move.l #CMD_List,d1
moveq #0,d2
move.l Output,d3
CALLDOS Execute
;---------------------------------------------------------------------------
ende_main:
;ggf. End-Botschaft und Verzögerung
tst.l WBenchMsg
beq ende_trk
move.l Output,d1
move.l #GoodBye,d2
moveq #GoodByeLen,d3
CALLDOS Write
move.l #150,d1
CALL Delay
;Library schließen
ende_trk:
CLOSELIB _TrackerBase
ende_all:
tst.l WBenchMsg ;war da was ?
beq toCLI ;na dann halt nicht
;Message zur WB zurück
move.l WBenchMsg,a1
CALLEXEC ReplyMsg
toCLI: moveq #0,d0
rts
;---------------------------------------------------------------------------
; Unterprogramm: File(Handle) d1 schließen
; Parameter: d1 = FileHandle-BPTR
; Ergebnis: -
Close_File:
tst.l d1
bne 1$
rts
1$: move.l d1,-(sp)
CALLTRK TRK_Close
move.l sp,d3
Print CloseTxt
add.w #4,sp
rts
;---------------------------------------------------------------------------
; Unterprogramm: File des Namens d1 öffnen und Anfang ausgeben
; Parameter: d1 = Adresse des Filenamens
; Buffer = Zeiger auf Dateipuffer (Länge 2*HEADLEN)
; Ergebnis: der FileHandle (Flags korrekt !)
Open_File:
move.l d1,-(sp)
move.l #MODE_OLDFILE,d2
CALLTRK TRK_Open
tst.l d0
bne 1$
;Datei nicht verfügbar !
move.l sp,d3
Print not_existant
addq.l #4,sp
moveq #0,d0
rts
;Datei geöffnet
1$: move.l sp,d3
move.l d0,-(sp)
Print existant
move.l (sp)+,d1
;Dateianfang lesen
move.l d1,(sp) ;Namen gegen FileHandle tauschen !
move.l Buffer,d2
move.l #HEADLEN,d3
CALL Read
move.l d0,-(sp)
move.l sp,d3
Print ReadNN
move.l Output,d1
move.l Buffer,d2
move.l (sp)+,d3
CALL Write
Print CrLf
move.l (sp)+,d0
rts
;---------------------------------------------------------------------------
; Unterprogramm: File des Namens d1 via Lock öffnen
; Parameter: d1 = Adresse des Filenamens
; Buffer = Zeiger auf Dateipuffer (Länge 2*HEADLEN)
; Ergebnis: der FileHandle (Flags korrekt !)
Lock_Open:
move.l #ACCESS_READ,d2
CALLTRK TRK_Lock ;sollte auch mit CALLDOS Lock laufen !
;(es sei denn, eine der Dateien ist
; nicht auffindbar)
tst.l d0
beq 2$ ;Datei nicht verfügbar ?
;Lock eröffnet
move.l d0,-(sp)
move.l sp,d3
move.l (sp)+,d0
move.l d0,d1
CALLTRK TRK_OpenFromLock
move.l d0,-(sp)
move.l sp,d3
move.l (sp)+,d0
tst.l d0
beq 2$
;Kopf einlesen:
move.l d0,-(sp)
move.l d0,d1
moveq #HEADLEN,d3
move.l Buffer,d2
add.l d3,d2
CALLDOS Read
move.l d0,-(sp)
move.l sp,d3
Print ReadNN
move.l Output,d1
move.l Buffer,d2
move.l (sp)+,d3
CALL Write
Print CrLf
move.l (sp)+,d0
move.l (sp)+,d0
2$: rts
;---------------------------------------------------------------------------
; Unterprogramm: die gelesenen Anfänge der beiden Dateien miteinander
; vergleichen
; Parameter: - ; Ergebnis: -
Compare: move.l Buffer,a0
moveq #HEADLEN,d0
move.l d0,a1
add.l a0,a1
subq.w #1,d0
1$: cmp.b (a0)+,(a1)+
bne 2$
dbra d0,1$
Print Equal_Text
rts
2$: Print Differ_Text
rts
;---------------------------------------------------------------------------
WBenchMsg: dc.l 0
FH_2a: dc.l 0
FH_2b: dc.l 0
FH_3a: dc.l 0
FH_3b: dc.l 0
TrName: TRACKERNAME
WdName: dc.b "CON:0/0/640/200/File-Test für tracker.library",0
GoodBye: dc.b 10,"Bye - closing soon !"
GoodByeLen: equ *-GoodBye
FileName_1: dc.b "s:Startup-Sequence",0
FileName_2: dc.b "devs:mountlist",0
FileName_3: dc.b "lib-dos.asm",0
FileName_4: dc.b "tracker.i",0
FileName_5: dc.b "RAM:dmmy",0
not_existant: dc.b "Datei %s kann nicht geöffnet werden !",10,0
existant: dc.b "Datei %s geöffnet"
CrLf: dc.b 10,0
CloseTxt: dc.b "Datei mit FileHandle-BPTR $%06lx geschloßen",10,0
ReadNN: dc.b "%ld Bytes gelesen: ",10,0
CMD_List: dc.b "list RAM:d#?",0
Equal_Text: dc.b "The two files opened via TRK_Open / TRK_Lock & TRK_OpenFromLock",10
dc.b "seem to be the same.",10,0
Differ_Text: dc.b "The two files opened via TRK_Open / TRK_Lock & TRK_OpenFromLock differ",10,0
END